home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / pyshared / DistUpgrade / DistUpgradeApport.py < prev    next >
Encoding:
Python Source  |  2009-04-27  |  2.5 KB  |  71 lines

  1.  
  2. import os
  3. import os.path
  4. import logging
  5. import subprocess
  6. import sys
  7. import gettext
  8. import errno
  9.  
  10. def apport_crash(type, value, tb):
  11.     logging.debug("running apport_crash()")
  12.     try:
  13.         from apport_python_hook import apport_excepthook
  14.         from apport.report import Report
  15.     except ImportError, e:
  16.         logging.error("failed to import apport python module, can't report bug: %s" % e)
  17.         return False
  18.     # we pretend we are update-manager
  19.     sys.argv[0] = "/usr/bin/update-manager"
  20.     apport_excepthook(type, value, tb)
  21.     # now add the files in /var/log/dist-upgrade/*
  22.     if os.path.exists('/var/crash/_usr_bin_update-manager.0.crash'):
  23.         report = Report()
  24.         for f in os.listdir("/var/log/dist-upgrade/"):
  25.             report[f.replace(".","").replace("-","")] = (open(os.path.join("/var/log/dist-upgrade",f)), )
  26.         report.add_to_existing('/var/crash/_usr_bin_update-manager.0.crash')
  27.     return True
  28.  
  29. def apport_pkgfailure(pkg, errormsg):
  30.     logging.debug("running apport_pkgfailure() %s: %s", pkg, errormsg)
  31.     LOGDIR="/var/log/dist-upgrade/"
  32.     s = "/usr/share/apport/package_hook"
  33.  
  34.     # we do not report followup errors from earlier failures
  35.     if gettext.dgettext('dpkg', "dependency problems - leaving unconfigured") in errormsg:
  36.         return False
  37.     # we do not run apport_pkgfailure for full disk errors
  38.     if os.strerror(errno.ENOSPC) in errormsg:
  39.         logging.debug("dpkg error because of full disk, not reporting against %s " % pkg)
  40.         return False
  41.  
  42.     if os.path.exists(s):
  43.         try:
  44.             p = subprocess.Popen([s,"-p",pkg,"-l",LOGDIR], stdin=subprocess.PIPE)
  45.             p.stdin.write("ErrorMessage: %s\n" % errormsg)
  46.             p.stdin.close()
  47.         except Exception, e:
  48.             logging.warning("Failed to run apport (%s)" % e)
  49.             return False
  50.         return True
  51.     return False
  52.  
  53. def run_apport():
  54.     " run apport, check if we have a display "
  55.     if "RELEASE_UPRADER_NO_APPORT" in os.environ:
  56.         logging.debug("RELEASE_UPRADER_NO_APPORT env set")
  57.         return False
  58.     if "DISPLAY" in os.environ:
  59.         for p in ["/usr/share/apport/apport-gtk", "/usr/share/apport/apport-qt"]:
  60.             if os.path.exists(p):
  61.                 ret = subprocess.call(p)
  62.                 return (ret == 0)
  63.     elif os.path.exists("/usr/bin/apport-cli"):
  64.         return (subprocess.call("/usr/bin/apport-cli") == 0)
  65.     logging.debug("can't find apport")
  66.     return False
  67.  
  68.  
  69. if __name__ == "__main__":
  70.     apport_crash(None, None, None)
  71.